home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 142
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z
/
Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin
/
tools
/
s_tool
/
move.c
< prev
next >
Wrap
Text File
|
1999-06-08
|
11KB
|
567 lines
#include "JX250.H"
#include <sys\iocs.h>
#include <sys\dos.h>
#include <sys\scsi.h>
#include <stdio.h>
#include <stdlib.h>
//---- 上の群
static UNchar b1[9*8]=
"11ab 22cd"
" "
"33ef 44gh"
" "
"55 66ij A"
" 77kl B"
"DD 88mn C"
"EE 99op ";
//---- 左下の群
static UNchar b2[17]="12 934 56 78";
//---- 右下の群
static UNchar b3[8*16]=
"11abAAAA"
" "
"22cdBBBB"
"33efCCCC"
"44ghDDDD"
" "
"55ijEEEE"
"66klFFFF"
"77mnGGGG"
" opHHHH"
" "
"88qrIIII"
"99stJJJJ"
"00uvKKKK"
" "
"WWXXYYZZ";
UNchar msp[17]={
1, // 標準
6,2,3,4,3,5,0,0,
2,0,5,0,4,0,0,0
};
//char msps[6]={0,0,-8,-8,-8,-8};
/**********************************************************
メインループ
**********************************************************/
int move()
{
int i,r,f;
int x,y,xx,yy,xo,yo,b;
MAP=MapAdds;
for(;;){
xo=-1;
yo=-1;
do {
_dos_keysns();
_dos_change_pr();
yy=( i=_ms_curgt_() )&0xFFFF;
xx=i>>16;
if ( xo!=xx || yo!=yy ){
f=fream_mousepos(xx,yy);
MsPat(msp[f+1]);
xo=xx;
yo=yy;
}
} while( MS_LSW()==0 && (b=MS_RSW())==0 );
if ( b!=0 ){
//右クリック
if ( xx>=2*8-2 && xx<31*8+2 && yy>=2*8-2 && yy<62*8+2 )
r=click_bar(xx,yy);
} elif ( f>=0 ){
// 枠内だ
if ( (_iocs_bitsns(0xE)&bit(0))==0 ){
move_fream(xx,yy,f);
} else {
MsPat(1);
new_fream(xx,yy);
}
} elif ( xx>=2*8-2 && xx<31*8+2 && yy>=2*8-2 && yy<62*8+2 ){
// 枠スキャン画面内だ
new_fream(xx,yy);
} else {
x=xx/16;
y=yy/16;
r=0;
if ( x>=17 && x<26 && y>=2 && y<10 ){
//--- 上のボックス
i=b1[(x-17)+(y-2)*9];
if ( i==' ' )
continue;
r=click_botton1( i,xx,yy );
} elif ( (x==17||x==18) && (y>=14 && y<=30) ){
//--- 左のボックス
i=b2[y-14];
if ( i==' ' )
continue;
r=click_botton2( i,xx,yy );
} elif ( x>=23 && x<31 && y>=15 && y<31 ){
//--- 右のボックス
i=b3[(x-23)+(y-15)*8];
if ( i==' ' )
continue;
r=click_botton3( i,xx,yy );
} elif ( xx>=33*8 && xx<47*8 && yy>=22*8 && yy<26*8 ){
//--- プリスキャン
if ( sxbotton(33*8,22*8,47*8,26*8,1)==0 ){
MsPat(-1);
SCSI_ID=AutoSreachJX(SCSI_ID,-1);
if ( SCSI_ID>=0 && SCSI_ID<=15 )
PreScanDisp();
}
} elif ( xx>=49*8 && xx<63*8 && yy>=22*8 && yy<26*8 ){
//--- スキャン
if ( sxbotton(49*8,22*8,63*8,26*8,1)==0 ){
MsPat(-1);
SCSI_ID=AutoSreachJX(SCSI_ID,-1);
if ( SCSI_ID>=0 && SCSI_ID<=15 )
ScanDisp();
}
} elif ( (x==13 || x==14) && y==0 ){
//---表示倍率
r=click_botton4(x);
} elif ( x>=27 && x<=30 && y>=6 && y<=9 ){
//--- 青スイッチ群
r=click_botton5((x-27)/2,(y-6)/2);
} elif ( x==0 && ( y==1 || y==30 ) ){
//--- 縦バー(ボタン)
r=click_botton6(y,0);
} elif ( xx>=6 && xx<=9 && yy>=32 && yy<480 ){
//--- 縦バー
r=click_botton6(yy,1);
} elif ( y==31 && ( x==1 || x==15 ) ){
//--- 横バーボタン
r=click_botton7(x,0);
} elif ( yy>=501 && yy<=506 && xx>=32 && xx<15*16 ){
//--- 縦バー
r=click_botton7(xx,1);
}
if ( r==99 && mv_eq() )
break;
}
while( MS_LSW()!=0 || MS_RSW()!=0 ){
yy=( i=_ms_curgt_() )&0xFFFF;
xx=i>>16;
if ( xo!=xx || yo!=yy ){
f=fream_mousepos(xx,yy);
MsPat(msp[f+1]);
xo=xx;
yo=yy;
}
_dos_keysns();
_dos_change_pr();
}
}
return(r);
}
/*+++++++++++*/
int mv_eq()
{
PosDedraw();
if ( Dialog("","終了しますか?","",2) ){
while( MS_LSW()!=0 || MS_RSW()!=0 );
PosSetDraw(PreX1,PreY1,PreX2,PreY2,-1);
return(0);
}
return(-1);
}
/**********************************************************
枠移動
**********************************************************/
void move_fream(sx,sy,fm)
int sx,sy,fm;
{
int i,x,y,xo,yo,bi,rs;
int xx,yy,b;
int x1o,y1o,x2o,y2o;
int x1,x2,y1,y2;
int _PreX1,_PreY1;
int _PreX2,_PreY2;
//--- 記憶
_PreX1 = PreX1;
_PreY1 = PreY1;
_PreX2 = PreX2;
_PreY2 = PreY2;
x1o=y1o=-1;
xo=-1;
yo=-1;
bi=1<<PreBai;
while( MS_LSW()!=0 && (b=MS_RSW())==0 ){
_dos_keysns();
_dos_change_pr();
yy=( i=_ms_curgt_() )&0xFFFF;
xx=i>>16;
if ( xo==xx && yo==yy )
continue;
xo=xx;
yo=yy;
rs=0;
if ( PreBai!=0 ){
int _x,_y;
_x=PrePX;
_y=PrePY;
if ( xx<16 ){
if ( PrePX>0 ){
PrePX-=16/bi;
if ( PrePX<0 )
PrePX=0;
}
}
if ( yy<16-3 ){
if ( PrePY>0 ){
PrePY-=16/bi;
if ( PrePY<0 )
PrePY=0;
}
}
if ( xx>232+16 ){
if ( PrePX<=(232-(232/bi)) ){
PrePX+=16/bi;
if ( PrePX>=(232-(232/bi)) )
PrePX=(232-(232/bi))-1+1;
}
}
if ( yy>496+3 ){
if ( PrePY<=(480-(480/bi)) ){
PrePY+=16/bi;
if ( PrePY>=(480-(480/bi)) )
PrePY=(480-(480/bi))-1+1;
}
}
if ( _x!=PrePX || _y!=PrePY ){
sx+=(_x-PrePX)*bi;
sy+=(_y-PrePY)*bi;
xx+=(_x-PrePX)*bi;
yy+=(_y-PrePY)*bi;
_iocs_ms_curst(xx,yy);
PosDedraw();
PreviewView();
rs=1;
}
}
if ( PreBai==0 ){
x=(xx-sx)*10224/232;
y=(yy-sy)*14064/480;
} else {
i=1<<PreBai;
//x=((xx-sx)*10224/232)/i;
//y=((yy-sy)*14064/480)/i;
x=(xx*10224/232/i)-(sx*10224/232/i);
y=(yy*14064/480/i)-(sy*14064/480/i);
}
x1 = _PreX1;
y1 = _PreY1;
x2 = _PreX2;
y2 = _PreY2;
if ( fm==0 ){
//--- 全体ムーブ
//
if ( x<0 ){
if ( x1+x>=0 ){
x1 += x;
x2 += x;
} else {
x2 -= x1;
x1 -= x1;
}
} elif ( x>0 ){
if ( x2+x<=10224-1 ){
x1 += x;
x2 += x;
} else {
x1 += (10224-1)-x2;
x2 += (10224-1)-x2;
}
}
if ( y<0 ){
if ( y1+y>=0 ){
y1 += y;
y2 += y;
} else {
y2 -= y1;
y1 -= y1;
}
} elif ( y>0 ){
if ( y2+y<=14064-1 ){
y1 += y;
y2 += y;
} else {
y1 += (14064-1)-y2;
y2 += (14064-1)-y2;
}
}
} else {
// bit 0 ; 上 bit 1 ; 左
// bit 2 ; 右 bit 3 ; 下
if ( (fm&bit(0))!=0 ){
//上
if ( y<0 ){
if ( y1+y>=0 )
y1 += y;
else y1 = 0;
} else {
if ( y1+y<=(y2-16) )
y1 += y;
else y1 = (y2-16);
}
}
if ( (fm&bit(1))!=0 ){
//左
if ( x<0 ){
if ( x1+x>=0 )
x1 += x;
else x1 = 0;
} else {
if ( x1+x<=(x2-16) )
x1 += x;
else x1 = (x2-16);
}
}
if ( (fm&bit(2))!=0 ){
//右
if ( x<0 ){
if ( x2+x>=(x1+16) )
x2 += x;
else x2 = (x1+16);
} else {
if ( x2+x<=10224-1 )
x2 += x;
else x2 = (10224-1);
}
}
if ( (fm&bit(3))!=0 ){
//下
if ( y<0 ){
if ( y2+y>=(y1+16) )
y2 += y;
else y2 = (y1+16);
} else {
if ( y2+y<=14064-1 )
y2 += y;
else y2 = (14064-1);
}
}
}
if ( x1!=x1o || y1!=y1o || x2!=x2o || y2!=y2o ){
PosSetDraw(x1,y1,x2,y2,-1);
x1o=x1;
y1o=y1;
x2o=x2;
y2o=y2;
} elif ( rs!=0 ){
PosSetDraw(x1,y1,x2,y2,-1);
}
CalcScanPara();
}
if ( b!=0 ){
//右クリック キャンセル
PosSetDraw(_PreX1,_PreY1,_PreX2,_PreY2,-1);
MsPat(-1);
CalcScanPara();
while( MS_LSW()!=0 || MS_RSW()!=0 );
return;
}
return;
}
/**********************************************************
枠新規
**********************************************************/
void new_fream(sx,sy)
int sx,sy;
{
int i,m,n,x,y,xo,yo;
int xx,yy,b;
int x1o,y1o;
int px1,py1,px2,py2;
int _PreX1,_PreY1;
int _PreX2,_PreY2;
//--- 記憶
_PreX1 = PreX1;
_PreY1 = PreY1;
_PreX2 = PreX2;
_PreY2 = PreY2;
x1o=y1o=-1;
xo=-1;
yo=-1;
//--- はじめの位置を記憶
if ( PreBai==0 ){
px1=(sx-16)*10224/232;
py1=(sy-16)*14064/480;
} else {
i=1<<PreBai;
px1=((sx-16+PrePX*i)*10224/232)/i;
py1=((sy-16+PrePY*i)*14064/480)/i;
}
px2=px1+1;
py2=py1+1;
PosSetDraw(px1,py1,px2,py2,-1);
CalcScanPara();
while( MS_LSW()!=0 && (b=MS_RSW())==0 ){
_dos_keysns();
_dos_change_pr();
yy=( i=_ms_curgt_() )&0xFFFF;
xx=i>>16;
if ( xo==xx && yo==yy )
continue;
xo=xx;
yo=yy;
if ( PreBai==0 ){
x=(xx-16)*10224/232;
y=(yy-16)*14064/480;
} else {
i=1<<PreBai;
x=((xx-16+PrePX*i)*10224/232)/i;
y=((yy-16+PrePY*i)*14064/480)/i;
}
m=px1;
n=py1;
if ( x>m ){
m=x;
x=px1;
}
if ( y>n ){
n=y;
y=py1;
}
if ( x<0 )
x=0;
if ( m>10224-1 )
m=10224-1;
if ( y<0 )
y=0;
if ( n>14064-1 )
n=14064-1;
PosSetDraw(x,y,m,n,-1);
CalcScanPara();
}
if ( b!=0 || (PreX2==PreX1+1 && PreY2==PreY1+1) ){
//右クリック キャンセル
PosSetDraw(_PreX1,_PreY1,_PreX2,_PreY2,-1);
CalcScanPara();
MsPat(-1);
while( MS_LSW()!=0 || MS_RSW()!=0 );
return;
}
return;
}
/********************************************************
青スイッチ群
********************************************************/
int click_botton5(xx,yy)
int xx,yy;
{
int r;
if ( sxbotton(27*16+xx*32+1,6*16+yy*32+1,27*16+xx*32+30,6*16+yy*32+30,1)!=0 )
return(0);
if ( xx==1 && yy==1 ){
//--- 終了
return(99);
}
if ( xx==0 && yy==1 ){
EnvMode();
return(0);
}
if ( xx==1 && yy==0 ){
//--- 記録
r=RecodeMode();
return(r);
}
if ( xx==0 && yy==0 ){
//---- 画像
ViewMode();
return(0);
}
return(0);
}
/********************************************************
プリスキャン
********************************************************/
void PreScanDisp()
{
PosDedraw();
Dialog(0,0," プリスキャン中",0);
Scan(0,SCSI_ID); // Prescan!!
PosSetDraw(PreX1,PreY1,PreX2,PreY2,-1);
PreviewView();
}
/********************************************************
スキャンするぞー
********************************************************/
void ScanDisp()
{
int i,j;
//--- データ用のメモリ確保
if ( (int)ScanData>99 ){
_dos_mfree(ScanData);
ScanData=0;
}
TXCLS(0); //TEXT クリア
AspScreen();
_iocs_g_clr_on();
Dialog(0,0," スキャン中",0);
//---
i=Scan(1,SCSI_ID); // Scan!!
if ( i==0 ){
//---------------- 成功
//----- 画面(512x512) に入る倍率を捜す
for(j=2;j>=-1;j--){
if ( (ScanDataX*(1<<(j+3))/8)<=512 && (ScanDataY*(1<<(j+3))/8)<=512 )
break;
}
RecVwBai=j; // 0;x1 1;x2 2;x4 3;x8
//-1;/2 -2;/4 -3;/8
VewPX=0;
VewPY=0;
_iocs_g_clr_on();
_iocs_home(0,0,0);
if ( SaveFrmMode==0 ){ // 0;スキャンサイズに変更
RecX2=0;
RecY2=0; // これでスキャンのサイズになる
}
ViewMode();
return;
} else {
//---------------- だめでした
_iocs_home(0,0,0);
if ( (int)ScanData>99 ){
_dos_mfree(ScanData);
ScanData=0;
}
if ( i==-1 ){
Dialog(0,"エラーが出てしまいました",0,1);
} elif ( i==-2 ){
Dialog( 0,
"SCSI エラーが出ました",
"スキャナを確認して下さい",
1
);
} elif ( i==-3 ){
Dialog( "パラメータに問題があります",
"取り込みサイズを確認して下",
"さい",
1
);
} elif ( i==-4 ){
Dialog( "メモリが足りません",
"取り込みサイズを小さくして",
"下さい",
1
);
} elif ( i==-9 ){
Dialog( "",
" 中断しました",
"",
1
);
}
}
//-- 画面をもとに
_iocs_crtmod(0x100+12);
ViewScrren();
PreviewView();
return;
}